gtksecurememory: Request that secure memory not be dumped to disk
authorMatthew Garrett <matthewgarrett@google.com>
Fri, 19 Apr 2019 20:08:32 +0000 (13:08 -0700)
committerJason Francis <jason@cycles.network>
Sat, 17 Apr 2021 23:29:42 +0000 (19:29 -0400)
Linux 3.4 added support for the MADV_DONTDUMP option to madvise(), which
requests that the covered memory not be included in coredumps. It makes
sense to use this to prevent cases where application crashes could
result in secrets being persisted to disk or included in dumps that are
uploaded to remote servers for analysis. I've avoided making this fatal
since there's a chance this code could be built on systems that have
MADV_DONTDUMP but run on systems that don't.

gtk/gtksecurememory.c

index 35a6f6b875ddedee8bb2e3a7afa7852f0e43acdb..6dff307e651a21650f2411e5cc05702da5d42385 100644 (file)
@@ -943,6 +943,19 @@ sec_acquire_pages (size_t *sz,
 
        DEBUG_ALLOC ("gtk-secure-memory: new block ", *sz);
 
+#if defined(MADV_DONTDUMP)
+       if (madvise (pages, *sz, MADV_DONTDUMP) < 0) {
+               if (show_warning && gtk_secure_warnings) {
+                       /*
+                        * Not fatal - this was added in Linux 3.4 and older
+                        * kernels will legitimately fail this at runtime
+                        */
+                       fprintf (stderr, "couldn't MADV_DONTDUMP %lu bytes of memory (%s): %s\n",
+                                (unsigned long)*sz, during_tag, strerror (errno));
+               }
+       }
+#endif
+
        show_warning = 1;
        return pages;